package com.wangling.learn.endpoint;

import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import java.util.Timer;
import java.util.TimerTask;

@ServerEndpoint("/ws-now")
public class NowEndpoint {

    // 静态属性，随着类，所以Timer的对象是全局只有一份
    private static final Timer timer = new Timer();

    //属性， 每次WebSocket独立。
    private TimerTask timerTask;

    public NowEndpoint () {
        System.out.println("实例化了一个EndPoint对象");
    }

    // NowEndpoint这个类的对象，是由Tomcat给我们创建的，这个和NowServlet类的对象创建是类似的。
    //但不同之处在于：NowServlet对象，在整体Tomcat运行过程中，只会实例化一次。
    //NowEndpoint对象，是每次有新的websocket建立，就会实例化一个对象

    @OnOpen
    public void onOpen(Session session) {
        timerTask = new SendNowTimerTask(session);
        // 每1秒，执行一次，发起当前时间给对方的逻辑
        // 由服务器主动发送消息（当前时间）给对方
        timer.scheduleAtFixedRate(timerTask, 0, 1000);
        System.out.println("对方建立了连接");
    }

    @OnClose
    public void onClose() {
        // 当关闭连接时，不需要执行定时任务了
        // 依赖的前提是：timerTask 属性是各个 webSocket独立的，所以关闭timeTask任务不会影响其他的webSocket连接
        timerTask.cancel();
/*
        System.out.println("对方关闭了连接");
*/
    }

    @OnError
    public void onError(Throwable throwable) {
        System.out.println("对方发生了错误:");
        throwable.printStackTrace(System.out);
    }
/*
    @OnMessage
    public void onMessage(String messageText, Session session) throws IOException {
        System.out.println("对方发来了消息" + messageText);

        // 获取远端
        // 发送消息给远端
        session.getBasicRemote().sendText("我已经收到你的消息，继续");

        // 关闭信道
        session.close();
    }*/
}
